import os
import launch
import launch_ros

from ament_index_python.packages import get_package_share_directory
import launch_ros.parameter_descriptions

def generate_launch_description():
    # 获取默认urdf路径
    urdf_package_path = get_package_share_directory('fishbot_desc')
    default_urdf_path = os.path.join(urdf_package_path,'urdf','fish_robot.urdf')
    default_rviz_path = os.path.join(urdf_package_path,'config','display_robot_model.rviz')
    # 声明一个urdf目录的参数，方便修改
    action_declare_arg_mode_path = launch.actions.DeclareLaunchArgument(
        name='model',
        default_value=str(default_urdf_path),
        description="加载的模型文件路径"
    ) 
    # sub_command_result = launch.substitutions.Command(['cat ',launch.substitutions.LaunchConfiguration('model')])
    sub_command_result = launch.substitutions.Command(['xacro ',launch.substitutions.LaunchConfiguration('model')])
    
    robot_desc_value = launch_ros.parameter_descriptions.ParameterValue(sub_command_result,value_type = str)
    

    # 通过文件路径，获取内容，并转换成参数值对象，以供传入
    action_robot_state_publisher = launch_ros.actions.Node(
        package='robot_state_publisher',
        executable='robot_state_publisher',
        parameters=[{'robot_description':robot_desc_value}]
    )

    action_joint_state_publisher = launch_ros.actions.Node(
        package='joint_state_publisher',
        executable='joint_state_publisher',
        
    )

    action_rviz_node = launch_ros.actions.Node(
        package='rviz2',
        executable='rviz2',
        arguments=['-d',default_rviz_path]
    )

    return launch.LaunchDescription([
        action_declare_arg_mode_path,
        action_robot_state_publisher,
        action_joint_state_publisher,
        action_rviz_node
    ])